package org.example;

import javax.print.DocFlavor;
import java.util.function.Function;
import java.util.function.IntBinaryOperator;

/**
 * Created by Lenovo
 * DATA:2024/6/19
 **/

/*
Lambda 表达式：
概述：
Lambda 表达式是JDK8 中的一个语法糖，他可以对某些匿名内部类的写法进行简化。
他是函数式编程思想的一个重要体现。让我们不用关注什么是对象，而是更关注我们对数据进行了什么操作。

核心原则： 可推导可省略

基本格式： (参数列表)->{代码}

 */

//    下面是一个例子
public class LambdaDemo01 {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello");
            }
        }).start();

        //lambda表达式对代码进行优化
        new Thread(() -> System.out.println("hello")).start();

        calculateNUm((a,b)-> a+b);
        calculateNUm((left, right) -> left+right);

        Integer integer = typeConver(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return Integer.valueOf(s);
            }
        });
        System.out.println("integer = " + integer);
        Integer integer2 = typeConver(s->Integer.valueOf(s));
        System.out.println("integer2 = " + integer2);
    }

    public static int calculateNUm(IntBinaryOperator operator){
        int a=10;
        int b =20;
        System.out.println(" = ");
        return operator.applyAsInt(a,b);
    }

    public static <R> R typeConver(Function<String,R> function){
        String str="1235";
        R result=function.apply(str);
        return result;
    };
    /**
     * 省略规则：
     * 1.参数类型可以省略
     * 2.方法体只有一句代码是大括号return和唯一一句代码的分号可以省略
     * 3.方法只有一个参数是小括号可以省略
     */
}
